﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
using Newtonsoft.Json;

namespace ARgoJson
{
    public class ARgoJson<T>
    {
        private readonly string jsonFilePath;

        public ARgoJson(string path)
        {
            jsonFilePath = path ?? throw new ArgumentNullException(nameof(path), "JSON file path cannot be null.");
        }

        // 读取数据
        public T Load()
        {
            if (!File.Exists(jsonFilePath))
            {
                return default; // 如果文件不存在，返回空列表
            }
            var json = File.ReadAllText(jsonFilePath);
            return JsonConvert.DeserializeObject<T>(json) ?? default;
        }

        // 清空数据，就是删除文件
        public void Clear()
        {
            if (File.Exists(jsonFilePath))
            {
                File.Delete(jsonFilePath);
            }
        }


        // 保存数据到 JSON 文件
        public void Save(T items)
        {
            var json = JsonConvert.SerializeObject(items, Formatting.Indented);
            File.WriteAllText(jsonFilePath, json);
        }
    }

    // ARgoSetting 类用于保存、加载和检查文件是否存在的设置
    public static class ARgoSettings
    {
        // 保存指定键与值的设置，值会被序列化为 JSON 格式并保存到文件
        public static void Save<T>(string key, T value)
        {
            var dirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings");
            if (!Directory.Exists(dirPath))Directory.CreateDirectory(dirPath);
            var filePath = Path.Combine(dirPath, $"{key}.txt");
            var json = JsonConvert.SerializeObject(value, Formatting.Indented);
            File.WriteAllText(filePath, json);
        }

        // 从指定键的文件中加载设置，文件内容会被反序列化为指定类型的对象
        public static T Load<T>(string key)
        {
            var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings", $"{key}.txt");
            var json = File.ReadAllText(filePath);
            return JsonConvert.DeserializeObject<T>(json);
        }

        // 检查指定键的设置文件是否存在
        public static bool exist(string key)
        {
            var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings", $"{key}.txt");
            return File.Exists(filePath);
        }
    }

}
